package com.ruijie.acl.service;

import java.util.List;

import com.ruijie.acl.AccessGroup;
import com.ruijie.acl.Ace;
import com.ruijie.acl.Template;
import com.ruijie.acl.TimeRange;
import com.ruijie.acl.task.model.AccessGroupInfo;
import com.ruijie.acl.type.MoveDirection;
import com.ruijie.foundation.annotation.DomainService;
import com.ruijie.foundation.dao.support.Page;
import com.ruijie.foundation.service.Repository;

@DomainService
public interface AceService  extends Repository<Ace>{
	/**
	 * 根据模板分页查询ACL规则
	 * @param entity　模板
	 * @param pageNo　页数
	 * @param pageSize　每面显示的记录数
	 * @return　ACL规则
	 */
	public Page pageQueryByTemplate(Template entity, int pageNo, int pageSize);
	/**
	 * 根据时间段分页查询ACL规则
	 * @param entity　时间段
	 * @param pageNo　页数
	 * @param pageSize　每面显示的记录数
	 * @return　ACL规则
	 */
	public Page pageQueryByTimeRange(TimeRange entity, int pageNo, int pageSize);
	/**
	 * 根据ACL组分页查询ACL规则
	 * @param entity　ACL组
	 * @param pageNo　页数
	 * @param pageSize　每面显示的记录数
	 * @return　ACL规则
	 */
	public Page pageQueryByAccessGroup(AccessGroup entity, int pageNo, int pageSize);
	/**
	 * 根据ACL组取得ACL规则
	 * @param entity　ACL组
	 * @return　ACL规则
	 */
	
	/**
	 * 根据模板取得ACL规则
	 * @param template　模板
	 * @return　ACL规则
	 */
	public List<Ace> getByTemplate(Template template);
	public List<Ace> getByAccessGroup(AccessGroup entity);
	/**
	 * 根据移动方向更新规则号
	 * @param entity
	 * @param direction
	 */
	public void updateAceNumWithDirection(Ace entity, MoveDirection direction);
	
	/**
	 * 根据ACL组删除ACL规则
	 * @param timeRange ACL组
	 */
	public void deleteByAccessGroup(AccessGroup accessGroup);
	
	/**
	 * 判断ACL规则是否存在
	 * @param entity ACL规则
	 * @return ACL规则是否存在
	 */
	public boolean existByAce(Ace entity);
	
	
	/**
	 * 设置ACE的时间段信息为NULL或者为空
	 * @param ids 时间段信息
	 */
	public void  updateAceByTimeRangeIds(String ids);
	
	/**
	 * 把数据库中取得AccessGroup的Entity转换成要下发的AccessGroup信息
	 * @param entity
	 * @return
	 */
	public List<AccessGroupInfo> accessGroup2AccessGroupInfo(List<AccessGroup> accessGroupList);
	/**
	 * 更新ACE序号
	 * @param entity ACL规则
	 * @param aceNumNew 修改后的ACE序号
	 */
	public void update(Ace entity, Integer aceNumNew);
}
